package com.mcxx.modules.temporary.fundpay.service.write;

import com.mcxx.common.exception.BizException;
import com.mcxx.convert.TmpFundPayConvert;
import com.mcxx.modules.temporary.fundpay.dao.write.TmpFundPayFamilyWriteDao;
import com.mcxx.modules.temporary.fundpay.dao.write.TmpFundPayMemberWriteDao;
import com.mcxx.modules.temporary.fundpay.dao.write.TmpFundPayWriteDao;
import com.mcxx.modules.temporary.fundpay.dto.TmpFundPayDTO;
import com.mcxx.modules.temporary.fundpay.entity.TmpFundPayEntity;
import com.mcxx.util.Constant;
import com.yinhai.ta404.core.security.vo.UserAccountVo;
import com.yinhai.ta404.core.transaction.annotation.TaTransactional;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service
@TaTransactional
public class TmpFundPayWriteService {

    @Autowired
    private TmpFundPayWriteDao tmpFundPayWriteDao;
    @Autowired
    private TmpFundPayFamilyWriteDao tmpFundPayFamilyWriteDao;
    @Autowired
    private TmpFundPayMemberWriteDao tmpFundPayMemberWriteDao;


    public int insert(TmpFundPayEntity tmpFundPay) {
    	return tmpFundPayWriteDao.insert(tmpFundPay);
    }


    public TmpFundPayEntity insertCapital(TmpFundPayDTO capitalFundPayDTO, UserAccountVo userAccountVo) {

        capitalFundPayDTO.setId(Constant.getUUID());
        capitalFundPayDTO.setOrgId(userAccountVo.getOrgId());
        capitalFundPayDTO.setAreaCode(userAccountVo.getAreaCode());

        TmpFundPayEntity fundPayEntity = TmpFundPayConvert.convertFundPayEntity(capitalFundPayDTO, userAccountVo);

        fundPayEntity.setStatus(Constant.FundPayState.CREATE_ING);

        if(null == capitalFundPayDTO.getIsAuto()) {
            fundPayEntity.setIsAuto(Constant.IsAuto.NO);
        }
        else {
            fundPayEntity.setIsAuto(capitalFundPayDTO.getIsAuto().toString());
        }

        fundPayEntity.setOperator(userAccountVo.getUserId());

        this.insertIgnoreNull(fundPayEntity);

        return fundPayEntity;
    }


    public int insertIgnoreNull(TmpFundPayEntity tmpFundPay) {
    	return tmpFundPayWriteDao.insertIgnoreNull(tmpFundPay);
    }


    public int update(TmpFundPayEntity tmpFundPay) {
    	return tmpFundPayWriteDao.update(tmpFundPay);
    }


    public void updateIgnoreNull(TmpFundPayEntity tmpFundPay) {
    	int rst = tmpFundPayWriteDao.updateIgnoreNull(tmpFundPay);
    	if(rst <= 0){
    	    throw new BizException("-1", "更新名册信息失败");
        }
    }


    public int delFundPay(List<String> fundPayIds){
        tmpFundPayFamilyWriteDao.delFundPayFamily(fundPayIds);
        tmpFundPayMemberWriteDao.delFundPayMember(fundPayIds);
        clearOrderFundId(fundPayIds);
        int rst = tmpFundPayWriteDao.delFundPay(fundPayIds);
        return rst;
    }


    public int updateFundPayNumAndStatus(String fundPayId, String status){
        return tmpFundPayWriteDao.updateFundPayNumAndStatus(fundPayId, status);
    }


    public int updateFundPayStatus(String fundPayId, String status){
        return tmpFundPayWriteDao.updateFundPayStatus(fundPayId, status);
    }


    public int updateFundPayNum(String fundPayId){
        return tmpFundPayWriteDao.updateFundPayNumAndStatus(fundPayId, null);
    }


    public void confirmFundPay(String fundPayId, UserAccountVo userAccountVo){
        TmpFundPayEntity fundPayEntity = new TmpFundPayEntity();
        fundPayEntity.setId(fundPayId);
        fundPayEntity.setStatus(Constant.FundPayState.CONFIRM);
        fundPayEntity.setCommitDate(new Date());
        fundPayEntity.setCheckPerson(userAccountVo.getUserId());
        this.updateIgnoreNull(fundPayEntity);
    }


    public void updateOrderFundId(List<String> orderIdList, String fundPayId) {
        tmpFundPayWriteDao.updateOrderFundId(orderIdList, fundPayId);
    }


    public void clearOrderFundId(List<String> fundPayIds) {
        tmpFundPayWriteDao.clearOrderFundId(fundPayIds);
    }


    public int updateFundpayState(String fundpayId, String state) {
        return tmpFundPayWriteDao.updateTempFundpayStateById(fundpayId, state);
    }

    public int cancelTmpFundPay(String ids, String state) {
        return tmpFundPayWriteDao.cancelTmpFundPay(ids, state);
    }
}
